package org.jsola.hr.service;

import org.jsola.admin.dto.DictItemUpdateDTO;
import org.jsola.admin.entity.DictItemDO;
import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.IMissionCenterDAO;
import org.jsola.hr.dto.MissionCenterAddDTO;
import org.jsola.hr.dto.MissionCenterExportWrongDTO;
import org.jsola.hr.dto.MissionCenterExtraAddDTO;
import org.jsola.hr.dto.MissionCenterUpdateDTO;
import org.jsola.hr.entity.MissionCenterDO;
import org.jsola.hr.query.MissionCenterQuery;
import org.jsola.hr.vo.MissionCenterImportVO;
import org.jsola.hr.vo.MissionCenterListVO;
import org.jsola.hr.vo.MissionCenterStatisticsVO;
import org.jsola.hr.vo.MissionCenterVO;
import org.jsola.user.core.TokenUser;
import org.jsola.user.entity.UserDO;

import java.io.File;
import java.util.List;


/**
 * 任务调度中心任务表
 *
 * @author zhr
 */
public interface IMissionCenterService extends IService<IMissionCenterDAO, MissionCenterDO> {

    /**
     * 新增任务调度中心任务表
     *
     * @param missionCenterAddDTO 新增任务调度中心任务表DTO
     * @param tokenUser           当前用户
     * @return 任务调度中心任务表详情信息
     */
    MissionCenterVO save(MissionCenterAddDTO missionCenterAddDTO, TokenUser tokenUser);

    /**
     * 修改任务调度中心任务表
     *
     * @param missionCenterUpdateDTO 修改任务调度中心任务表DTO
     * @param tokenUser              当前用户
     * @return 更新数量
     */
    int update(MissionCenterUpdateDTO missionCenterUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除任务调度中心任务表，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser        当前用户
     * @param missionCenterIds 任务调度中心任务表id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String... missionCenterIds);

    /**
     * 根据任务调度中心任务表id查找
     *
     * @param missionCenterId 任务调度中心任务表id
     * @param siteId          所属站点id
     * @return 任务调度中心任务表详情信息
     */
    MissionCenterVO selectById(String missionCenterId, String siteId);

    /**
     * 查询任务调度中心任务表
     *
     * @param missionCenterQuery 查询条件
     * @param siteId             所属站点id
     * @return 任务调度中心任务表列表信息
     */
    List<MissionCenterListVO> select(MissionCenterQuery missionCenterQuery, String siteId);

    /**
     * 查询任务调度中心任务表记录数
     *
     * @param missionCenterQuery 查询条件
     * @param siteId             所属站点id
     * @return 任务调度中心任务表记录数
     */
    int selectCount(MissionCenterQuery missionCenterQuery, String siteId);

    /**
     * 分页查询任务调度中心任务表
     *
     * @param missionCenterQuery 查询条件
     * @param siteId             所属站点id
     * @return 任务调度中心任务表列表信息
     */
    Page<MissionCenterListVO> selectPage(MissionCenterQuery missionCenterQuery, String siteId);


    /**
     * 根据任务调度中心任务表id查找
     *
     * @param missionCenterId 任务调度中心任务表id
     * @param siteId          所属站点id
     * @return 任务调度中心任务表
     */
    MissionCenterDO selectDOById(String missionCenterId, String siteId);

    /**
     * 查询任务调度中心任务表
     *
     * @param missionCenterQuery 查询条件
     * @param siteId             所属站点id
     * @return 任务调度中心任务表列表
     */
    List<MissionCenterDO> selectDO(MissionCenterQuery missionCenterQuery, String siteId);

    /**
     * 解析导入的Excel
     *
     * @param file      Excel
     * @param tokenUser 当前用户
     * @return 解析结果
     */
    MissionCenterImportVO parseExcel(File file, TokenUser tokenUser);

    /**
     * Excel数据入库
     *
     * @param missionCenterExtraAddDTO 入库参数
     * @param tokenUser                当前用户
     * @return 保存条数
     */
    Integer saveExcel(MissionCenterExtraAddDTO missionCenterExtraAddDTO, TokenUser tokenUser);

    /**
     * 查询派单顶部统计
     *
     * @param missionCenterQuery 查询条件
     * @param tokenUser          当前用户
     * @return 统计信息
     */
    MissionCenterStatisticsVO selectTopStatistics(MissionCenterQuery missionCenterQuery, TokenUser tokenUser);

    /**
     * 查询某个任务顶部人数统计
     *
     * @param missionCenterId 任务Id
     * @param tokenUser       当前用户
     * @return 统计信息
     */

    MissionCenterStatisticsVO selectReceiveTopStatistics(String missionCenterId, TokenUser tokenUser);

    /**
     * 查询接单顶部统计
     *
     * @param missionCenterQuery 查询参数
     * @param tokenUser          当前用户
     * @return 统计信息
     */

    MissionCenterStatisticsVO selectAllReceiveTopStatistics(MissionCenterQuery missionCenterQuery, TokenUser tokenUser);

    /**
     * 接单人员查看自己有权限看见的任务
     *
     * @param missionCenterQuery 查询条件
     * @param tokenUser          当前用户
     * @return 任务
     */
    Page<MissionCenterListVO> viewMission(MissionCenterQuery missionCenterQuery, TokenUser tokenUser);

    /**
     * 确认接单
     *
     * @param missionCenterId 任务Id
     * @param tokenUser       当前用户
     * @return 接单结果
     */
    Boolean confirmReceive(String missionCenterId, TokenUser tokenUser);

    /**
     * 错误数据导出excel路径
     *
     * @param exportWrongDTO 导出参数
     * @param tokenUser      当前用户
     * @return excel路径
     */
    String exportWrongsDataPath(MissionCenterExportWrongDTO exportWrongDTO, TokenUser tokenUser);

    /**
     * 查询站点下所有派过单的人员,供前端筛选
     *
     * @param tokenUser 当前用户
     * @return 人员
     */
    List<UserDO> selectAllCreateUserBySite(TokenUser tokenUser);

    /**
     * 更新dict
     *
     * @param dictItem          查询结果(修改前)
     * @param dictItemUpdateDTO 更新内容(修改后)
     * @param tokenUser         登录用户
     */
    void updateDict(DictItemDO dictItem, DictItemUpdateDTO dictItemUpdateDTO, TokenUser tokenUser);

    /**
     * 查询dict
     *
     * @param dictItem  查询结果
     * @param tokenUser 登录用户
     * @return 使用当前标签的事件的数量
     */
    Integer selectDict(DictItemDO dictItem, TokenUser tokenUser);

}


